网站发布新文章后,搜索引擎不一定会立刻发现并收录。传统方式通常需要等待爬虫定期访问,而 IndexNow 提供了一种更主动的通知机制:网站可以在页面新增、更新或删除时,将相关 URL 发送给支持该协议的搜索引擎,帮助它们更快了解内容变化。

下面这段代码展示了如何使用 Node.js 向 IndexNow 提交链接。

首先,代码通过 SHA-256 生成一个 16 位密钥:

const hashKey = createHash('sha256')
  .update(authOrigin + Date.now())
  .digest('hex')
  .slice(0, 16);

密钥用于验证提交请求确实来自网站所有者。随后,程序根据配置确定网站的公开目录,并将密钥写入对应的文本文件:

const uploadDir = join(process.cwd(), Config.publicPath());
writeKeyFile(hashKey, `${uploadDir}/${hashKey}.txt`);

这一步非常重要:IndexNow 服务需要能够通过公开地址访问该文件,并确认文件内容与请求中的密钥一致。因此,网站部署完成后,应检查 keyLocation 对应的 URL 是否可以正常打开,且文件内容是否正确。

接下来,代码向 IndexNow 接口发送 POST 请求:

const response = await $fetch.raw(
  'https://api.indexnow.org/indexnow',
  {
    method: 'POST',
    headers: {
      'Content-Type': 'application/json; charset=utf-8',
    },
    body: {
      host: authOrigin,
      key: hashKey,
      keyLocation: `${authOrigin}/${hashKey}.txt`,
      urlList: Array.isArray(pushUrl) ? pushUrl : [pushUrl],
    },
  }
);

请求体中,host 表示网站域名,key 是生成的密钥,keyLocation 指向密钥文件,urlList 则是需要提交的页面地址。代码兼容单个 URL 和 URL 数组,调用时更加灵活。

实际使用时还应注意,authOrigin 必须与待提交链接的域名一致;密钥文件应部署到公开目录;提交前最好校验 URL,避免发送无效或其他站点的地址。此外,可以根据接口返回状态记录成功或失败信息,便于排查问题。

通过 IndexNow,网站能够更及时地向搜索引擎传递内容更新信号。不过,它并不保证页面一定会被收录,内容质量、网站可访问性以及搜索引擎自身策略仍然会影响最终结果。